package com.tfjybj.itoo.exam.provider.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tfjybj.itoo.exam.entity.ExaminationEntity;
import com.tfjybj.itoo.exam.entity.ExamineeEntity;
import com.tfjybj.itoo.exam.entity.OptionEntity;
import com.tfjybj.itoo.exam.model.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * ExaminationDao接口
 * examination表
 *
 * @author 任晓帅
 * @version 2.0.0
 * @since 2.0.0 2018-11-15 19:40:28
 */
@Repository("examinationDao")
public interface ExaminationDao extends BaseMapper<ExaminationEntity> {
	
	//region 模板生成：模糊查询
	/**
     * 根据课程id模糊查询examination
     *
     * @param courseId  课程id
     * @return 模糊查询的examination集合
     * @author 任晓帅
     * @since 2.0.0 2018-11-15 19:40:28
     */
    List<ExaminationEntity> queryLikeCourseId(@Param("courseId") String courseId);

    //endregion





    /* **********************************以下为非模板生成的内容********************************* */
    /**
     * 根据教师账号查询老师分页所有考试
     * @param operator 教师ID
     * @return  教师所有考试
     * @author 谢妞
     * @since 2018年12月14日19:09:12
     */
    List<ExaminationModel> queryByOperator(@Param("operator") String operator);


    List<ExaminationModel>queryDropDown(@Param("operator") String operator);
    /**
     *  查询所有课程id
     * @author      王雪芬
     * @return      courseName
     * @since 2.0.0     2018-11-19 12:09:40
     */
    List<String> querycourseByid();
    /**
     * 根据课程id查询考试名称
     * @author      王雪芬
     * @return      ExaminationModel 考生信息
     * @param      examcourseid String
     * @since 2.0.0       2018-11-19 12:09:51
     */
    List<ExaminationModel> queryExamName(@Param("examcourseid") String examcourseid);

    /**
     * 当前课程下的考试的所有考场信息
     * @author      任晓帅（改）
     * @return      ExaminationModel 考生信息
     * @param       courseId,examNameId
     * @since 2.0.0 2019年5月14日18:16:23
     */
     List<ExamRoomModel> queryExamRoomInfo(@Param("courseId") String courseId, @Param("examNameId") String examNameId);

//    /**
//     * 根据考试时间查询考场
//     * @author      王雪芬
//     * @return      ExaminationModel 考生信息
//     * @param
//     * @since 2.0.0        2018-11-19 12:10:04
//     */
//    //    TODO 要删掉的错误代码
//    List<ExaminationModel> queryExamSETime(@Param("courseId") String courseId,@Param("examNameId") String examNameId);
    /**
     * 查看所有监考老师
     * @author  王雪芬
     * @param   examId String
     * @return  ExamineeReachClassModel  考生信息
     *  @date        2018-11-19 12:10:09
     */
//    TODO 要删掉的错误代码
    List<ExamineeReachClassModel> queryExamTearch(@Param("examId") String examId);

    /**
     * @param examId
     * @return 删除数
     * @author maying
     * @since 2018年11月18日10:04:57
     */
    int arrayDelete(@Param("examId") String examId);

    /**
     * 根据考试状态查询所有考试信息table表格
     * @author maying
     * @since 2018年11月18日16:00:38
     * @param state 状态
     * @param stateTwo 状态
     * @param operatorId 登录人id
     * @return datatable表
     */
    List<ExaminationModel> selAllExamation(@Param("state") int state, @Param("stateTwo") Integer stateTwo, @Param("operatorId") String operatorId);

    /**
     * 通过考试id和操作人查询考试信息
     *
     * @param examId   考试id
     * @param operator 操作人
     * @author 王雪芬
     * @since 2.0.0 2018年11月21日16:01:32
     */
    List<ExamOnlineinforedisModel> examOnlineInfo(@Param("examId") String examId, @Param("operator") String operator);

    /**
     *
     * 通过考试id查询试题存储到reids
     * @param examId   考试id
     * @param operator 操作人
     * @author 王雪芬
     * @since 2.0.0 2018年11月21日16:01:32
     *
     * */
    String queryExamOnlineQuestionInfo(@Param("examId") String examId, @Param("operator") String operator);


    /**
     *
     * 通过考试id查询课程id
     * @param examId   考试id
     * @author 王雪芬
     * @since 2.0.0 2018年11月21日16:01:32
     *
     * */
    String queryOnlineCourseById(@Param("examId") String examId, @Param("operator") String operator);

    /**
     * 组合查询，根据考试id，分类id，考试开始时间，结束时间，班级ID
     * @param examId
     * @param classifyId
     * @param classId
     * @return 符合条件的考试examination
     * @author 谢妞
     * @since 2018年12月14日19:14:22
     */
    List<ExaminationModel>queryCombine(@Param("operator") String operator, @Param("examId") String examId, @Param("classifyId") String classifyId, @Param("classId") String classId);


    /**
     *
     * 根据操作人id查询今天和明天即将开始的考试
     * @param operator 操作人
     * @author 王雪芬
     * @since 2.0.0 2018年11月22日16:01:32
     *
     * */
    List<ExaminationModel> queryExamTimeInfo(@Param("operator") String operator);


    /**
     * @author maying
     * @since 2018-11-22 20:50:51
     * @return 考试时长
     * @param examId
     */
    int selfindExamDuration(@Param("examId") String examId);

    /**
     * 查询当前考试(或者距离最近的考试)
     * @return 学生信息
     * @author 王雪芬
     * @since 2018-11-23 15:51:29
     */
    ExaminationModel queryExamInfo();

    /**
     * @author maying
     * @since 2018-11-22 20:50:51
     * @return 获取所有考试
     * @param examName
     */
    List<ExaminationEntity> selExam(@Param("examName") String examName);

    /**
     * 获取当前时间4个小时内所有的所有考试-考试预加载-王雪芬-2018年11月24日
     *
     * @return 考试
     * @author 王雪芬
     * @since 2.0.0 2018年11月22日21:22:58
     */
    List<ExaminationModel> getExamResourse();



    /**
     *
     * 根据考生id或学号查询当前考试信息
     * @return 考试
     * @author 王雪芬
     * @since 2.0.0 2018年11月22日21:22:58
     */
    List<ExaminationEntity>  queryExamStudentExaminOnline(@Param("list") List<ExamineeEntity> list);


    List<OptionEntity> queryExamOtion(@Param("questionId") String questionId);

    /**
     * 根据考试名称 验重
     *
     * @author maying
     * @since 2018年11月30日19:51:39
     * @param examName
     * @return
     */
    List<ExaminationEntity> selExamName(@Param("examName") String examName);
    /**
     * 当前时间更新考试状态
     * @author 王雪芬
     * @since 2018年11月30日19:51:39
     * @return 是否更新成功
     */
    int updateExamBeStatus(@Param("examinationBeModels") List<ExaminationModel> examinationBeModels);
    /**
     * 查询考试开始和结束时间中间state=1
     * @author 王雪芬
     * @since 2018年11月30日19:51:39
     * @return 是否更新成功
     */
    List<ExaminationModel> queryExamBetweenTime();

    /**
     * 查询当前时间大于考试时间
     * @author 王雪芬
     * @since 2018年11月30日19:51:39
     * @return 是否更新成功
     */
    List<ExaminationModel> queryExamEndTime();

    /**
     * 大于结束时间,state=2
     * @author 王雪芬
     * @since 2018年11月30日19:51:39
     * @return 是否更新成功
     */
    int updateExamEndStatus(@Param("examinationModels") List<ExaminationModel> examinationModels);

    /**
     * 根据模板查询id正在考试或者未开始的考试-李娜-2019年4月18日
     * @param templateId
     * @return
     */
    List<ExaminationModel> selectExamByTemplate(@Param("templateId") String templateId);

    ExaminationModel queryRecoverExamination(@Param("examinationId") String examinationId);

    ExaminationEntity queryExamination(@Param("examinationId") String examinationId);

    /**
     * 根据考试id集合查询考试信息
     *
     * @param examIdList 考试id集合
     * @return List<Examination>
     * @author 马莹
     * @since 2018-12-26 19:56:37
     */
    List<ExaminationModel> selectExam(@Param("examIdList") List<String> examIdList);

    ExaminationEntity loginExamStudentExaminOnline(@Param("examinationId") String examinationId);

    /**
     * 查询当前考试-任蒙蒙-2018年12月28日
     *
     * @return String
     * @author 任蒙蒙
     */
    List<String> selectCurrentExam();

    /**
         * 查询已发布小练
         * @param  operator 登录id
         * @return
         * @author 魏恩君
         * @since 2.0.0 2019/1/26
         */

    List<ExaminationModel> queryReleasedPractice(@Param("operator") String operator);


    /**
     * 更新考试状态
     * @param examID 考试id
     * @Param state 状态
     * @return
     * @author 魏恩君
     * @since 2.0.0 2019/1/26
     */
    int updateExamState(@Param("examID") String examID, @Param("state") String state);

    /**
     * 根据学生id查询正在进行的考试（小练）
     * @author 于云秀
     * @since 2019年1月27日11:43:35
     * @param userId
     * @return
     */
    List<ExaminationModel> selectNowExam(@Param("userId") String userId);

    /**
     * 根据学生学号查询考试名称（小练）
     * @author 谷海涛
     * @since 2019年7月18日
     * @param studentCode
     * @return
     */
    List<ExaminationModel> queryPracticeNowExamQuestion(@Param("studentCode") String studentCode);

    List<PracticeTeacherModel> selectStudentScoreBystudentId(@Param("studentId") String studentId, @Param("examType") int examType, @Param("examState") int examState);
}
